/**
 * Content Module localforage
 */
import localforage from "localforage";
import {
  getHandleLawData,
  getUnhandleLawData,
  getLawRootData,
} from "../api/getLaws";

/**
 * 设置处理后的法律数据的本地缓存
 * @param {*} id 对应法律的id(根节点id)
 * @param {*} data 处理后的法律数据
 */
async function setHandleLegalStorage(id, data) {
  await localforage.setItem(`handleLegalStorage-${id}`, data);
}

/**
 * 设置处理后的法律数据的本地缓存
 * @param {*} id 对应法律的id(根节点id)
 * @param {*} data 处理后的法律数据
 */
async function setUnhandleLegalStorage(id, data) {
  await localforage.setItem(`unhandleLegalStorage-${id}`, data);
}

/**
 * 设置法律根节点数据的本地缓存
 * @param {*} data
 */
async function setLawRootStorage(data) {
  await localforage.setItem("lawRootStorage", data);
}

/**
 * 获取处理后的法律数据的本地缓存
 * @param {*} id 对应法律的id(根节点id)
 * @returns
 */
export async function getHandleLegalStorage(id) {
  const Storage = await localforage.getItem(`handleLegalStorage-${id}`);
  if (!Storage || Storage.length <= 0) {
    const data = await getHandleLawData(id);
    await setHandleLegalStorage(id, data);
    return data;
  } else {
    return Storage;
  }
}

/**
 * 获取未处理数据的本地缓存
 * @param {*} id 对应法律的id(根节点id)
 * @returns
 */
export async function getUnHandleLegalStorage(id) {
  const Storage = await localforage.getItem(`unhandleLegalStorage-${id}`);
  if (!Storage || Storage.length <= 0) {
    const data = await getUnhandleLawData(id);
    await setUnhandleLegalStorage(id, data);
    return data;
  } else {
    return Storage;
  }
}

/**
 * 获取所有法律根节点的数据
 * @returns
 */
export async function getLawRootStorage() {
  const Storage = await localforage.getItem("lawRootStorage");
  if (!Array.isArray(Storage) || Storage.length <= 0) {
    const data = await getLawRootData();
    await setLawRootStorage(data);
    return data;
  } else {
    return Storage;
  }
}

/**
 * 移除处理后的法律数据的本地缓存
 * @param {*} id
 */
export async function removeHandleLegalStorage(id) {
  await localforage.removeItem(`handleLegalStorage-${id}`);
}

/**
 * 移除未处理数据的本地缓存
 * @param {*} id
 */
export async function removeUnhandleLegalStorage(id) {
  await localforage.removeItem(`unhandleLegalStorage-${id}`);
}

/**
 * 移除所有法律根节点的数据
 */
export async function removeLawRootStorage() {
  await localforage.removeItem("lawRootStorage");
}
